/**
 *shift() 方法从数组中删除第一个元素，并返回该元素的值。此方法更改数组的长度。
 原理：shift() 方法从数组中删除并返回第一个元素，同时将其他元素往前移动。
实现：由于删除的是数组的第一个元素，所以数组的其它元素都要发生位移，因此就需要遍历的移动每一个数组中的元素，这一点比起pop非常的不方便！
返回值：被删除的元素或者undefined
 * @returns undefined或被删除的元素
 */
Array.prototype.myShift = function () {
  if (!Array.isArray(this)) throw new TypeError("musted be called by array");

  if (this.length === 0) return undefined;

  // 浅拷贝一个数组
  let arr = [...this];

  for (let i = 1; i < arr.length; i++) {
    // 原数组值往前移动，注意这样才是不改变原数组
    this[i - 1] = this[i];
  }
  return arr[0];
};

// egg
let arr = [1, 2, 3, 4];
console.log("[ arr ] >", arr.myShift());

let arr1 = [1, 2, 3, 4];
console.log("[ arr ] >", arr1.shift());
